﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using System.Security.Permissions;
using Bovespa.Infra.Services;
using Bovespa.Infra.Services.Transactions;
using Bovespa.Infra.Services.Security;
using Bovespa.Infra.Logging.Audit;
using Bovespa.Infra.ExceptionHandling;

namespace Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos
{
    /// <summary>
    /// Contrato de servico "IUsuario".
    /// </summary>
    [ExceptionShielding]
    [Authentication]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Usuario/ServiceContracts/2010/08", Name = "IUsuario", SessionMode = SessionMode.Allowed)]
    public interface IUsuario
    {
        /// <summary>
        /// Recupera uma lista de entidades de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarUsuario")]
        List<Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos.Usuario> ConsultarUsuario();

        /// <summary>
        /// Recupera uma entidade de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterUsuario")]
        Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos.Usuario ObterUsuario(int entrada);

        /// <summary>
        /// Recupera uma entidade de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterUsuarioPorNome")]
        Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos.Usuario ObterUsuarioPorNome(string nome);

        /// <summary>
        /// Persiste uma entidade de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "InserirUsuario")]
        void InserirUsuario(Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos.Usuario entrada);

        /// <summary>
        /// Remove uma entidade de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirUsuario")]
        void ExcluirUsuario(int entrada);

        /// <summary>
        /// Atualiza uma entidade de negocio "Usuário".
        /// </summary>
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(BusinessFault))]
        [SuppressTransactions]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AtualizarUsuario")]
        void AtualizarUsuario(Bovespa.Sinacor.Servico.BaseConhecimento.Usuario.Servicos.Contratos.Usuario entrada);

    }
}
